Computer storage needs continue to increase, both in terms of capacity and performance. For many years hard disk drives based on rotating magnetic media dominated the storage market, providing ever increasing density and throughput combined with low latency. However, for certain applications even better performance was desired, and so solid-state drives (SSDs) were introduced that out-performed traditional hard drives, yet cost significantly more per byte of storage.
Some computing applications are more sensitive to differences in storage performance than others. For example, core operating system functions, low latency applications such as video games, storage focused applications such as databases, and the like benefit more from the increased performance of an SSD than web browsing, media consumption, and other less storage intensive tasks. Similarly, computing tasks that perform a significant number of random access storage operations, as opposed to streaming or contiguous operations, may benefit more from the reduced latency of an SSD. For example, executable files may benefit more from an SSD than data files, which may perform adequately when stored on a traditional rotating hard drive.
Given cost constraints and a desire to provide high-speed yet high-capacity storage devices, manufacturers have created hybrid storage devices that include an SSD for performance sensitive operations and a rotating hard drive for high-capacity requirements. Hybrid storage devices have also been created in software by filesystems that incorporate separate hard drive and SSD devices into a single logical storage volume. However, optimally allocating different types of data to differently performing components of a hybrid storage device remains an ongoing challenge.
One technique for increasing effective storage device performance is to allow concurrent access by multiple central processing units (CPUs), cores, or threads of execution. Challenges to allowing concurrent access include maintaining metadata consistency and preventing unintentional overwriting of data. Existing techniques include locking mechanisms that grant individual threads of execution exclusive access to a sensitive piece of metadata.
However, locks are a cause of performance problems, including stalls and context switches. Furthermore, when multiple CPUs or cores attempt to concurrently access the same piece of metadata, each core may load the metadata into a level 1 (L1) cache specific to that core, such that a modification by one core will invalidate a cache line in the other cores. This invalidation causes the core to stall as the recently modified cache line is loaded. As a result, latency and throughput are degraded.
It is with respect to these and other considerations that the disclosure made herein is presented.